package com.iamteer.day20;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**
主要回顾：缓冲输入字节流

IO 流分类：
	按数据的流向：
		输入流：
		输出流：
		
	按处理的单位：
		字节流：字节流读取到的都是文件的二进制数据
		字符流：读取数据是以字符为单位（读取到的也是二进制数据，转成也字符）
			字符流 = 字节流 + 解码
			
输入字节流：
--------| InputStream	所有输入字节流的基类（抽象类）
------------| FileInputStream	读取文件数据的输入字节流
------------| BufferedInputStream	缓冲输入字节流（内维护一个 8kB 的字节数组）


输出字节流
--------| OutputStream	所有输出字节流的基类（抽象类）
------------| FileOutputStream	输出文件数据的输出字节流
 */
public class BufferInStream {

	public static void main(String[] args) throws IOException {
//		readTest1();
		readTest2();
	}
	
	public static void readTest1() throws IOException {
		File file = new File("test.txt");
		FileInputStream fileInputStream = new FileInputStream(file);
		BufferedInputStream bStream = new BufferedInputStream(fileInputStream);
		
		int content = 0;
		while ((content = bStream.read()) != -1) {
			System.out.print((char)content);
		}
		bStream.close();
	}
	
	public static void readTest2() {
		FileInputStream fileInputStream = null;
		BufferedInputStream bStream = null;
		
		try {
			File file = new File("test1.txt");
			fileInputStream = new FileInputStream(file);
			bStream = new BufferedInputStream(fileInputStream);
			int content = 0;
			while ((content = bStream.read()) != -1) {
				System.out.print((char)content);
			}
		} catch ( IOException e) {
			System.out.println("读取文件失败。。。");
			throw new RuntimeException(e);
		}finally {
			if (bStream != null) {
				try {
					bStream.close();
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
			}
		}
	}

}
